/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tk.eigh.ksvg;

import java.util.HashMap;
import java.util.Map;
import ksvg.shape.Circle;
import org.apache.myfaces.commons.util.ArrayUtils;
import org.apache.myfaces.shared.renderkit.html.HTML;

/**
 *
 * @author nt
 */
public interface SVG {

    String XMLNS = "http://www.w3.org/2000/svg";
    String XMLNS_ATTR_NAME = "xmlns";
    String VERSION_ATTR = "version";
    //tag name Definitions
    String DESCRIPTION_TAG_NAME = "desc";
    String METADATA_TAG_NAME = "metadata";
    String TITLE_TAG_NAME = "title";
    String GROUP_TAG_NAME = "g";
    String DEFINITIONS_TAG_NAME = "defs";
    String SWITCH_TAG_NAME = "switch";
    String ANCHOR_TAG_NAME = "a";
    //conditional processing attributes
    String REQUIRED_FETAURES_ATTR = "requiredFeatures";
    String REQUIRED_EXTENSTIONS_ATTR = "requiredExtensions";
    String SYSTEM_LANGUAGE_ATTR = "systemLanguage";
    String[] CONDITIONAL_PROCESSING_ATTRS = {
        REQUIRED_FETAURES_ATTR,
        REQUIRED_EXTENSTIONS_ATTR,
        SYSTEM_LANGUAGE_ATTR
    };
    //core attributes
    String XML_BASE_ATTR = "xml:base";
    String XML_BASE_PROP = "xmlBase";
    String XML_LANG_ATTR = "xml:lang";
    String XML_LANG_PROP = "xmlLang";
    String XML_SPACE_ATTR = "xml:space";
    String XML_SPACE_PROP = "xmlSpace";
    Map<String, String> CORE_ATTRIBUTES_MAP = new HashMap<String, String>() {

        {
            put(XML_BASE_PROP, XML_BASE_ATTR);
            put(XML_LANG_PROP, XML_LANG_ATTR);
            put(XML_SPACE_PROP, XML_SPACE_ATTR);
        }
    };
    //xlink namespace
    String XLINK_XMLNS = "http://www.w3.org/1999/xlink";
    String XLINK_XMLNS_ATTR_NAME = "xmlns:xlink";
    //xlink attributes
    String XLINK_HREF_PROP = "xlinkHref";
    String XLINK_HREF_ATTR = "xlink:href";
    String XLINK_SHOW_PROP = "xlinkShow";
    String XLINK_SHOW_ATTR = "xlink:show";
    String XLINK_ACTUATE_PROP = "xlinkActuate";
    String XLINK_ACTUATE_ATTR = "xlink:actuate";
    String XLINK_TYPE_PROP = "xlinkType";
    String XLINK_TYPE_ATTR = "xlink:type";
    String XLINK_ROLE_PROP = "xlinkRole";
    String XLINK_ROLE_ATTR = "xlink:role";
    String XLINK_ARCROLE_PROP = "xlinkArcrole";
    String XLINK_ARCROLE_ATTR = "xlink:arcrole";
    String XLINK_TITLE_PROP = "xlinkTitle";
    String XLINK_TITLE_ATTR = "xlink:title";
    //comonAttributes
    String EXTERNAL_RESOURCES_REQUIRED_ATTR = "externalResourcesRequired";
    String[] STYLE_ATTRS = {
        HTML.STYLE_ATTR,
        HTML.STYLE_CLASS_ATTR
    };
    String[] COMMON_ATTRS = {
        HTML.STYLE_ATTR,
        HTML.STYLE_CLASS_ATTR,
        EXTERNAL_RESOURCES_REQUIRED_ATTR
    };
    //graphical Event Attributes
    String ONFOCUSIN_ATTR = "onfocusin";
    String ONFOCUSOUT_ATTR = "onfocusout";
    String ONACTIVATE_ATTR = "onactivate";
    String[] GRAPHICAL_EVENT_ATTRS = {
        ONFOCUSIN_ATTR,
        ONFOCUSOUT_ATTR,
        ONACTIVATE_ATTR,
        HTML.ONCLICK_ATTR,
        HTML.ONMOUSEDOWN_ATTR,
        HTML.ONMOUSEUP_ATTR,
        HTML.ONMOUSEOVER_ATTR,
        HTML.ONMOUSEMOVE_ATTR,
        HTML.ONMOUSEOUT_ATTR
    };
    //Document-level event attributes
    //‘onunload’, ‘onabort’, ‘onerror’, ‘onresize’, ‘onscroll’, ‘onzoom’
    String ONABORT_ATTR = "onabort";
    String ONERROR_ATTR = "onerror";
    String ONRESIZE_ATTR = "onresize";
    String ONSCROLL_ATTR = "onscroll";
    String ONZOOM_ATTR = "onzoom";
    String[] DOCUMENT_EVENT_ATTRIBUTES = {
        HTML.ONUNLOAD_ATTR,
        ONABORT_ATTR,
        ONERROR_ATTR,
        ONRESIZE_ATTR,
        ONSCROLL_ATTR,
        ONZOOM_ATTR
    };
    //TODO ‘onload’
    //
    String TRANSFORM_ATTR = "transform";
    String VISIBILITY_ATTR = "visibility";
    String DISPLAY_ATTR = "display";
    //_SVGContainer common Attributes
    String[] CONTAINER_COMMON_ATTRIBUTES = (String[]) ArrayUtils.concat(
            CONDITIONAL_PROCESSING_ATTRS,
            (String[]) ArrayUtils.concat(
            COMMON_ATTRS,
            GRAPHICAL_EVENT_ATTRS));
    //strokeProperties
    String STROKE_PROP = "stroke";
    String STROKE_DASHARRAY_ATTR = "stroke-dasharray";
    String STROKE_DASHARRAY_PROP = "strokeDasharray";
    String STROKE_DASHOFFSET_ATTR = "stroke-dashoffset";
    String STROKE_DASHOFFSET_PROP = "strokeDashoffset";
    String STROKE_LINECAP_ATTR = "stroke-linecap";
    String STROKE_LINECAP_PROP = "strokeLinecap";
    String STROKE_LINEJOIN_ATTR = "stroke-linejoin";
    String STROKE_LINEJOIN_PROP = "strokeLinejoin";
    String STORKE_MITTERLIMIT_ATTR = "stroke-miterlimit";
    String STORKE_MITTERLIMIT_PROP = "strokeMiterlimit";
    String STROKE_OPACITY_ATTR = "stroke-opacity";
    String STROKE_OPACITY_PROP = "strokeOpacity";
    String STROKE_WIDTH_ATTR = "stroke-width";
    String STROKE_WIDTH_PROP = "strokeWidth";
    String[] STROKE_PROPERTIES = {
        STROKE_PROP,
        STROKE_DASHARRAY_PROP,
        STROKE_DASHOFFSET_PROP,
        STROKE_LINECAP_PROP,
        STROKE_LINEJOIN_PROP,
        STORKE_MITTERLIMIT_PROP,
        STROKE_OPACITY_PROP,
        STROKE_WIDTH_PROP
    };
    //FillProperties
    String FILL_PROP = "fill";
    String FILL_RULE_ATTR = "fill-rule";
    String FILL_RULE_PROP = "fillRule";
    String FILL_OPACITY_ATTR = "fill-opacity";
    String FILL_OPACITY_PROP = "fillOpacity";
    String[] FILL_PROPERTIES = {
        FILL_PROP,
        FILL_RULE_PROP,
        FILL_OPACITY_PROP
    };
    //font Props
    String FONT_PROP = "font";
    String FONT_FAMILY_PROP = "fontFamily";
    String FONT_FAMILY_ATTR = "font-family";
    String FONT_SIZE_PROP = "fontSize";
    String FONT_SIZE_ATTR = "font-size";
    String FONT_SIZE_ADJUST_PROP = "fontSizeAdjust";
    String FONT_SIZE_ADJUST_ATTR = "font-size-adjust";
    String FONT_STRETCH_PROP = "fontStretch";
    String FONT_STRETCH_ATTR = "font-stretch";
    String FONT_STYLE_PROP = "fontStyle";
    String FONT_STYLE_ATTR = "fontStyle";
    String FONT_VARIANT_PROP = "fontVariant";
    String FONT_VARIANT_ATTR = "font-variant";
    String FONT_WEIGHT_PROP = "fontWeight";
    String FONT_WEIGHT_ATTR = "font-weight";
    String[] FONT_PROPERTIES = {
        FONT_PROP,
        FONT_FAMILY_PROP,
        FONT_SIZE_PROP,
        FONT_SIZE_ADJUST_PROP,
        FONT_STRETCH_PROP,
        FONT_STYLE_PROP,
        FONT_VARIANT_PROP,
        FONT_WEIGHT_PROP
    };
    //baseline Props
    String ALIGNMENT_BASELINE_PROP = "alignmentBaseline";
    String ALIGNMENT_BASELINE_ATTR = "alignment-baseline";
    String BASELINE_SHIFT_PROP = "baselineShift";
    String BASELINE_SHIFT_ATTR = "baseline-shift";
    String DOMINANT_BASELINE_PROP = "dominantBaseline";
    String DOMINANT_BASELINE_ATTR = "dominant-baseline";
    String[] BASELINE_PROPERTIES = {
        ALIGNMENT_BASELINE_PROP,
        BASELINE_SHIFT_PROP,
        DOMINANT_BASELINE_PROP
    };
    //text Content Props
    String DIRECTION_PROP = "direction";
    String GLYPH_ORIENTATION_HORIZONTAL_PROP = "GlyphOrientationHorizontal";
    String GLYPH_ORIENTATION_HORIZONTAL_ATTR = "Glyph-orientation-horizontal";
    String GLYPH_ORIENTATION_VERTICAL_PROP = "GlyphOrientationVertical";
    String GLYPH_ORIENTATION_VERTICAL_ATTR = "Glyph-orientation-vertical";
    String KERNING_PROP = "kerning";
    String LETTER_SPACING_PROP = "letterSpacing";
    String LETTER_SPACING_ATTR = "letter-spacing";
    String TEXT_ANCHOR_PROP = "textAnchor";
    String TEXT_ANCHOR_ATTR = "text-anchor";
    String TEXT_DECORATION_PROP = "textDecoration";
    String TEXT_DECORATION_ATTR = "text-decoration";
    String UNICODE_BIDI_PROP = "unicodeBidi";
    String UNICODE_BIDI_ATTR = "Unicode-bidi";
    String WORD_SPACING_PROP = "wordSpacing";
    String WORD_SPACING_ATTR = "word-spacing";
    //positioning Props
    String X_PROP = "x";
    String Y_PROP = "y";
    String[] POSITIONAL_PROPERTIES = {
        X_PROP,
        Y_PROP
    };
    //Dimension Props
    String WIDTH_PROP = "width";
    String HEIGHT_PROP = "height";
    String[] DIMENSIONAL_PROPERTIES = {
        WIDTH_PROP,
        HEIGHT_PROP
    };
    //Concatenation of Pos and Dim
    String[] POSITIONAL_AND_DIMENSIONAL_PROPERTIES = (String[]) ArrayUtils.concat(POSITIONAL_PROPERTIES, DIMENSIONAL_PROPERTIES);
    //svg Element specific Properties
    String BASE_PROFILE_PROP = "baseProfile";
    String CONTENT_SCRIPT_TYPE_PROP = "contentScriptType";
    String CONTENT_STYLE_TYPE_PROP = "contentStyleType";
    String PRESERVE_ASPECT_RATION_PROP = "preserveAspectRatio";
    String VIEW_BOX_PROP = "viewBox";
    String ZOOM_AND_PAN_PROP = "zoomAndPan";
    String[] DOCUMENT_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_AND_DIMENSIONAL_PROPERTIES,
            new String[]{
                BASE_PROFILE_PROP,
                CONTENT_SCRIPT_TYPE_PROP,
                CONTENT_STYLE_TYPE_PROP,
                PRESERVE_ASPECT_RATION_PROP,
                VIEW_BOX_PROP,
                ZOOM_AND_PAN_PROP
            });
    //rect Element specific Properties
    String ROUND_X_PROP = "rx";
    String ROUND_Y_PROP = "ry";
    String[] ROUND_PROPERTIES = {ROUND_X_PROP, ROUND_Y_PROP};
    String[] RECT_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(POSITIONAL_AND_DIMENSIONAL_PROPERTIES, ROUND_PROPERTIES);
    //circle/ellipse Element specific Properties
    String CENTER_X_PROP = "cx";
    String CENTER_Y_PROP = "cy";
    String RADIUS_PROP = "radius";
    String RADIUS_ATTR = "r";
    String[] CENTER_PROPERTIES = {CENTER_X_PROP, CENTER_Y_PROP};
    String[] ELLIPSE_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(CENTER_PROPERTIES, ROUND_PROPERTIES);
    //line Element specific Properties
    String X1_PROP = "x1";
    String X2_PROP = "x2";
    String Y1_PROP = "y1";
    String Y2_PROP = "y2";
    String[] LINE_ELEMENT_PROPERTIES = {X1_PROP, X2_PROP, Y1_PROP, Y2_PROP};
    //tspan Element specific Properties
    String DELTA_X_PROP = "dx";
    String DELTA_Y_PROP = "dy";
    String ROTATE_PROP = "rotate";
    String TEXT_LENGTH_PROP = "textLength";
    String LENGTH_ADJUST_PROP = "lengthAdjust";
    String[] TSPAN_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_PROPERTIES,
            new String[]{
                DELTA_X_PROP,
                DELTA_Y_PROP,
                ROTATE_PROP,
                TEXT_LENGTH_PROP,
                LENGTH_ADJUST_PROP
            });
    //text Element specific Properties
    String TEXT_RENDERING_PROP = "text-rendering";
    String WRITING_MODE_PROP = "writing-mode";
    String[] TEXT_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            TSPAN_ELEMENT_PROPERTIES,
            new String[]{
                TEXT_RENDERING_PROP,
                WRITING_MODE_PROP,
                TRANSFORM_ATTR
            });
    //textpath Element specific Properties
    String START_OFFSET_PROP = "startOffset";
    String METHOD_PROP = "method";
    String SPACING_PROP = "spacing";
    String[] TEXTPATH_ELEMENT_PROPERITES = new String[]{
        START_OFFSET_PROP,
        METHOD_PROP,
        SPACING_PROP
    };
    //altGlyph Element specific Properties
    String GLYPHREF_PROP = "glyphRef";
    String FORMAT_PROP = "format";
    String[] ALTGLYPH_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_PROPERTIES,
            new String[]{
                DELTA_X_PROP,
                DELTA_Y_PROP,
                ROTATE_PROP,
                GLYPHREF_PROP,
                FORMAT_PROP
            });
    //glyphRef Element specific Properties
    String[] GLYPHREF_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_PROPERTIES,
            new String[]{
                DELTA_X_PROP,
                DELTA_Y_PROP,
                GLYPHREF_PROP,
                FORMAT_PROP
            });
    //Gradient common Properties
    String GRADIENT_UNITS_PROP = "gradientUnits";
    String GRADINET_TRANSFORM_PROP = "gradientTransform";
    String SPREAD_METHOd_PROP = "spreadMethod";
    String[] GRADIENT_COMMON__PROPERTIES = {
        SVG.GRADIENT_UNITS_PROP,
        SVG.GRADINET_TRANSFORM_PROP,
        SVG.SPREAD_METHOd_PROP
    };
    //linearGradient elemet specific Properties
    String LINEAR_GRADIENT_ELEMENT_TAG_NAME = "linearGradient";
    String[] LINEAR_GRADIENT_ELMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            SVG.GRADIENT_COMMON__PROPERTIES,
            new String[]{
                SVG.X1_PROP,
                SVG.X2_PROP,
                SVG.Y1_PROP,
                SVG.Y2_PROP
            });
    //radialGradient element specific Properties
    String RADIAL_GRADIENT_ELEMENT_TAG_NAME = "radialGradient";
    String FX_PROP = "fx";
    String FY_PROP = "fy";
    String[] RADIAL_GRADIENT_ELMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            SVG.GRADIENT_COMMON__PROPERTIES,
            new String[]{
                SVG.CENTER_X_PROP,
                SVG.CENTER_Y_PROP,
                SVG.FX_PROP,
                SVG.FY_PROP
            });
    //stop elment specific Properties
    String STOP_ELEMENT_TAG_NAME = "stop";
    String OFFSET_PROP = "offset";
    String STOP_COLOR_PROP = "stopColor";
    String STOP_COLOR_ATTR = "stop-color";
    String STOP_OPACITY_PROP = "stopOpacity";
    String STOP_OPACITY_ATTR = "stop-opacity";
    Map<String, String> STOP_ELEMENT_PROPERITES = new HashMap<String, String>(0x3) {

        {
            put(SVG.OFFSET_PROP, SVG.OFFSET_PROP);
            put(SVG.STOP_COLOR_PROP, SVG.STOP_COLOR_ATTR);
            put(SVG.STOP_OPACITY_PROP, SVG.STOP_OPACITY_ATTR);
        }
    };
    //filter  element specific Properties
    String FILTER_TAG_NAME = "filter";
    String FILTER_UNITS_ATTR = "filterUnits";
    String FILTER_RES_ATTR = "filterRes";
    String[] FILTER_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_AND_DIMENSIONAL_PROPERTIES,
            new String[]{
                FILTER_RES_ATTR,
                FILTER_UNITS_ATTR
            });
    //filter common Attributes
    String RESULT_ATTR = "result";
    String IN_ATTR = "in";
    String[] FILTER_COMMON_ATTRIBUTES = (String[]) ArrayUtils.concat(
            POSITIONAL_AND_DIMENSIONAL_PROPERTIES,
            new String[]{
                RESULT_ATTR,
                IN_ATTR
            });
    //feDistantLight element specific Properties
    String FE_DISTANTLIGHT_TAG_NAME = "feDistantLight";
    String AZIMUTH_PROP = "azimuth";
    String ELEVATION_PROP = "elevation";
    String[] FE_DISTANTLIGHT_ELEMENT_PROPERTIES = {
        AZIMUTH_PROP,
        ELEVATION_PROP
    };
    //fePointLight element specific Properties
    String FE_POINTLIGHT_TAG_NAME = "fePointLight";
    String Z_PROP = "z";
    String[] FE_POINTLIGHT_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            POSITIONAL_PROPERTIES,
            new String[]{
                Z_PROP
            });
    //feSpotLight element specific Proerties
    String FE_SPOTLIGHT_TAG_NAME = "feSpotLight";
    String POINTS_AT_X_PROP = "pointsAtX";
    String POINTS_AT_Y_PROP = "pointsAtY";
    String POINTS_AT_Z_PROP = "pointsAtZ";
    String SPECULAR_EXPONENT_PROP = "specularExponent";
    String LIMITING_CONE_ANGLE_PROP = "limitingConeAngle";
    String[] FE_SPOTLIGHT_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            FE_POINTLIGHT_ELEMENT_PROPERTIES,
            new String[]{
                POINTS_AT_X_PROP,
                POINTS_AT_Y_PROP,
                POINTS_AT_Z_PROP,
                SPECULAR_EXPONENT_PROP,
                LIMITING_CONE_ANGLE_PROP
            });
    //feBlend element specific Properties
    String FE_BLEND_TAG_NAME = "feBlend";
    String IN2_ATTR = "in2";
    String MODE_ATTR = "mode";
    String[] FE_BLEND_ELEMENT_PROPERTIES = {
        IN2_ATTR,
        MODE_ATTR
    };
    //feColorMatrix element specific Properties
    String FE_COLOR_MATRIX_TAG_NAME = "feColorMatrix";
    String TYPE_ATTR = "type";
    String VALUES_ATTR = "values";
    String[] FE_COLOR_MATRIX_PROPERITES = {
        TYPE_ATTR,
        VALUES_ATTR
    };
    //feComponentTransfer
    String FE_COMPONENT_TRANSFER = "feComponentTransfer";
    //TransferFunction element specific Properties
    //TODO eachFunction name
    String TABLE_VALUE_ATTR = "tableValues";
    String SLOPE_ATTR = "slope";
    String INTERCEPT_ATTR = "intercept";
    String AMPLITUDE_ATTR = "amplitude";
    String EXPONENT_ATTR = "exponent";
    String OFFSET_ATTR = "offset";
    String[] FE_TRANSFER_FUNCTION_ELEMENT_PROPERTIES = {
        TYPE_ATTR,
        TABLE_VALUE_ATTR,
        SLOPE_ATTR,
        INTERCEPT_ATTR,
        AMPLITUDE_ATTR,
        EXPONENT_ATTR,
        OFFSET_ATTR
    };
    //feComposite element specific Properties
    String FE_COMPOSITE_TAG_NAME = "feComposite";
    String OPERATOR_ATTR = "operator";
    String K1_ATTR = "k1";
    String K2_ATTR = "k2";
    String K3_ATTR = "k3";
    String K4_ATTR = "k4";
    String[] FE_COMPOSITE_ELEMENT_PROPERTIES = {
        IN2_ATTR,
        OPERATOR_ATTR,
        K1_ATTR,
        K2_ATTR,
        K3_ATTR,
        K4_ATTR
    };
    //feConvolveMatrix element specific Properties
    String FE_CONVOLVE_MATRIX_TAG_NAME = "feConvolveMatrix";
    String ORDER_ATTR = "order";
    String KERNEL_MATRIX_ATTR = "kernelMatrix";
    String DIVISOR_ATTR = "divisor";
    String BIAS_ATTR = "bias";
    String TARGETX_ATTR = "targetX";
    String TARGETY_ATTR = "targetY";
    String EDGE_MODE_ATTR = "edgeMode";
    String KERNEL_UNIT_LENGTH_ATTR = "kernelUnitLength";
    String PRESERVE_ALPHA_ATTR = "preserveAlpha";
    String[] FE_CONVOLVE_MATRIX_ELEMENT_PROPERTIES = {
        ORDER_ATTR,
        KERNEL_MATRIX_ATTR,
        DIVISOR_ATTR,
        BIAS_ATTR,
        TARGETX_ATTR,
        TARGETY_ATTR,
        EDGE_MODE_ATTR,
        KERNEL_UNIT_LENGTH_ATTR,
        PRESERVE_ALPHA_ATTR
    };
    //feDiffuseLighting element specific Properties
    String FE_DIFFUSE_LIGHTING_TAG_NAME = "feDiffuseLighting";
    String SUFACE_SCALE_ATTR = "surfaceScale";
    String DIFFUSE_CONSTANT_ATTR = "diffuseConstant";
    String[] FE_DIFFUSE_LIGHTING_ELEMENT_PROPERITES = {
        SUFACE_SCALE_ATTR,
        DIFFUSE_CONSTANT_ATTR,
        KERNEL_UNIT_LENGTH_ATTR
    };
    //feDisplacementMap element specific Properties
    String FE_DISPLACEMENT_MAP_TAG_NAME = "feDisplacementMap";
    String SCALE_ATTR = "scale";
    String X_CHANNEL_SELECTOR_ATTR = "xChannelSelector";
    String Y_CHANNEL_SELECTOR_ATTR = "yChannelSelector";
    String[] FE_DISPLACEMENT_MAP_ELEMENT_PROPERTIES = {
        IN2_ATTR,
        SCALE_ATTR,
        X_CHANNEL_SELECTOR_ATTR,
        Y_CHANNEL_SELECTOR_ATTR
    };
    //feFlood element specific Properties
    String FE_FLOOD_TAG_NAME = "feFlood";
    String FLOOD_COLOR_ATTR = "flood-color";
    String FLOOD_COLOR_PROP = "floodColor";
    String FLOOD_OPACITY_ATTR = "flood-opacity";
    String FLOOD_OPACITY_PROP = "floodOpacity";
    Map<String, String> FE_FLOOD_ELEMENT_PROPERTIES = new HashMap<String, String>(0x2) {

        {
            put(FLOOD_COLOR_PROP, FLOOD_COLOR_ATTR);
            put(FLOOD_OPACITY_PROP, FLOOD_OPACITY_ATTR);
        }
    };
    //feGaussianBlur element specific Properties
    String FE_GAUSSIAN_BLUR_TAG_NAME = "feGaussianBlur";
    String STD_DEVIATION_ATTR = "stdDeviation";
    String[] FE_GAUSSIAN_BLUR_ELEMENT_PROPERITES = {
        STD_DEVIATION_ATTR
    };
    //TODO feImage
    //feMerge
    String FE_MERGE_TAG_NAME = "feMerge";
    String FE_MERGE_NODE_TAG_NAME = "feMergeNode";
    //feMorphology element specific Properties
    String FE_MORPHOLOGY_TAG_NAME = "feMorphology";
    String[] FE_MORPHOLOGY_ELEMENT_PROPERTIES = {
        OPERATOR_ATTR,
        RADIUS_PROP
    };
    //feOffset element specific Properties
    String FE_OFFSET_TAG_NAME = "feOffset";
    String[] FE_OFFSET_ELEMENT_PROPERITES = {
        DELTA_X_PROP,
        DELTA_Y_PROP
    };
    //feSpecularLighting element specific Properties
    String FE_SPECULAR_LIGHTING_TAG_NAME = "feSpecularLighting";
    String SPECULAR_CONSTANT_ATTR = "specularConstant";
    String SPECULAR_EXPONENT_ATTR = "specularExponent";
    String[] FE_SPECULAR_LIGHTING_ELEMENT_PROPERITES = {
        SUFACE_SCALE_ATTR,
        SPECULAR_CONSTANT_ATTR,
        SPECULAR_EXPONENT_ATTR,
        KERNEL_UNIT_LENGTH_ATTR
    };
    //feTile
    String FE_TILE_TAG_NAME = "feTile";
    //feTurbulence element specific Properties
    String FE_TRUBULENCE_TAG_NAME = "feTurbulence";
    String BASE_FREQUENCY_ATTR = "baseFrequency";
    String NUM_OCTAVES_ATTR = "numOctaves";
    String SEED_ATTR = "seed";
    String STITCH_TILES_ATTR = "stitchTiles";
    String[] FE_TURBULENCE_ELEMENT_PROPERITES = {
        BASE_FREQUENCY_ATTR,
        NUM_OCTAVES_ATTR,
        SEED_ATTR,
        STITCH_TILES_ATTR
    };
    //Animation common Attributes
    String ATTRIBUTE_TYPE_ATTR = "attributeType";
    String ATTRIBUTE_NAME_ATTR = "attributeName";
    String BEGIN_ATTR = "begin";
    String DUR_ATTR = "dur";
    String END_ATTR = "end";
    String MIN_ATTR = "min";
    String MAX_ATTR = "max";
    String RESTART_ATTR = "restart";
    String REPEAT_COUNT_ATTR = "repeatCount";
    String REPEAT_DUR_ATTR = "repeatDur";
    String[] ANIMATION_COMMON_PROPERTIES = {
        ATTRIBUTE_TYPE_ATTR,
        ATTRIBUTE_NAME_ATTR,
        BEGIN_ATTR,
        DUR_ATTR,
        END_ATTR,
        MIN_ATTR,
        MAX_ATTR,
        RESTART_ATTR,
        REPEAT_COUNT_ATTR,
        REPEAT_DUR_ATTR
    };
    //Animate Element specific Properties
    String ANIMATE_ELEMENT_TAG_NAME = "animate";
    String ADDITIVE_ATTR = "additive";
    String ACCUMULATE_ATTR = "accumulate";
    String CALC_MODE_ATTR = "calcMode";
    String KEY_TIMES_ATTR = "keyTimes";
    String KEY_SPLINES_ATTR = "keySplines";
    String FROM_ATTR = "from";
    String TO_ATTR = "to";
    String BY_ATTR = "by";
    String[] ANIMATE_ELEMENT_PROPERTIES = {
        ADDITIVE_ATTR,
        ACCUMULATE_ATTR,
        CALC_MODE_ATTR,
        KEY_TIMES_ATTR,
        KEY_SPLINES_ATTR,
        FROM_ATTR,
        TO_ATTR,
        BY_ATTR,
        VALUES_ATTR
    };
    //set Element specific Properties
    String SET_ELEMENT_TAG_NAME = "set";
    String[] SET_ELEMENT_PROPERTIES = {
        TO_ATTR,
        EXTERNAL_RESOURCES_REQUIRED_ATTR
    };
    //animateMotion element specific Properties
    String ANIMATE_MOTION_TAG_NAME = "animateMotion";
    String PATH_ATTR = "path";
    String KEY_POINTS_ATTR = "keyPoints";
    String ORIGIN_ATTR = "origin";
    String[] ANIMATE_MOTION_ELEMENT_PROPERTIES = (String[]) ArrayUtils.concat(
            ANIMATE_ELEMENT_PROPERTIES,
            new String[]{
                PATH_ATTR,
                KEY_POINTS_ATTR,
                ROTATE_PROP,
                ORIGIN_ATTR
            });
    String MPATH_TAG_NAME = "mpath";
    //animateColor element specific Properties
    String ANIMATE_COLOR_TAG_NAME = "animateColor";
    //animateTransform element specific Properties
    String ANIMATE_TRANSFORM_TAG_NAME = "animateTransform";
}